using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._3DFeatures._Interpolation
{
    /// <summary>
    /// <para>Interpolate Polygon To Multipatch</para>
    /// <para>Creates surface-conforming  multipatch features by draping polygon features over a surface.</para>
    /// <para>通过在曲面上叠加面要素来创建符合曲面的多面体要素。</para>
    /// </summary>    
    [DisplayName("Interpolate Polygon To Multipatch")]
    public class InterpolatePolyToPatch : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public InterpolatePolyToPatch()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_surface">
        /// <para>Input Surface</para>
        /// <para>The input triangulated irregular network (TIN) or terrain dataset surface.</para>
        /// <para>输入三角化不规则网络 （TIN） 或 terrain 数据集表面。</para>
        /// </param>
        /// <param name="_in_feature_class">
        /// <para>Input Feature Class</para>
        /// <para>The input polygon feature.</para>
        /// <para>输入面要素。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The output multipatch feature class.</para>
        /// <para>输出多面体要素类。</para>
        /// </param>
        public InterpolatePolyToPatch(object _in_surface, object _in_feature_class, object _out_feature_class)
        {
            this._in_surface = _in_surface;
            this._in_feature_class = _in_feature_class;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Interpolate Polygon To Multipatch";

        public override string CallName => "3d.InterpolatePolyToPatch";

        public override List<string> AcceptEnvironments => ["XYDomain", "XYResolution", "ZDomain", "ZResolution", "autoCommit", "configKeyword", "extent", "geographicTransformations", "outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_in_surface, _in_feature_class, _out_feature_class, _max_strip_size, _z_factor, _area_field, _surface_area_field, _pyramid_level_resolution];

        /// <summary>
        /// <para>Input Surface</para>
        /// <para>The input triangulated irregular network (TIN) or terrain dataset surface.</para>
        /// <para>输入三角化不规则网络 （TIN） 或 terrain 数据集表面。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Surface")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_surface { get; set; }


        /// <summary>
        /// <para>Input Feature Class</para>
        /// <para>The input polygon feature.</para>
        /// <para>输入面要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_class { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The output multipatch feature class.</para>
        /// <para>输出多面体要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Maximum Strip Size</para>
        /// <para>Controls the maximum number of points used to create an individual triangle strip. Note that each multipatch is usually composed of multiple strips. The default value is 1,024.</para>
        /// <para>控制用于创建单个三角形条带的最大点数。请注意，每个多面体通常由多个条带组成。默认值为 1,024。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Strip Size")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _max_strip_size { get; set; } = 1024;


        /// <summary>
        /// <para>Z Factor</para>
        /// <para>The factor by which z-values will be multiplied. This is typically used to convert z linear units to match x,y linear units. The default is 1, which leaves elevation values unchanged. This parameter is not available if the spatial reference of the input surface has a z datum with a specified linear unit.</para>
        /// <para>z 值将乘以的因子。这通常用于转换 z 线性单位以匹配 x，y 线性单位。默认值为 1，使高程值保持不变。如果输入曲面的空间参考具有具有指定线性单位的 z 基准面，则此参数不可用。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _z_factor { get; set; } = 1;


        /// <summary>
        /// <para>Area Field</para>
        /// <para>The name of the output field containing the planimetric, or 2D, area of the resulting multipatches.</para>
        /// <para>包含生成的多面体的平面面积或 2D 区域的输出字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _area_field { get; set; } = null;


        /// <summary>
        /// <para>Surface Area Field</para>
        /// <para>The name of the output field containing the 3D area of the resulting multipatches. This area takes the surface undulations into consideration and is always larger than the planimetric area unless the surface is flat, in which case, the two are equal.</para>
        /// <para>包含生成的多面体的 3D 区域的输出字段的名称。该面积考虑了表面起伏，并且始终大于平面面积，除非表面是平坦的，在这种情况下，两者相等。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Surface Area Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _surface_area_field { get; set; } = null;


        /// <summary>
        /// <para>Pyramid Level Resolution</para>
        /// <para>The z-tolerance or window-size resolution of the terrain pyramid level that will be used. The default is 0, or full resolution.</para>
        /// <para>将使用的地形金字塔级别的 z 容差或窗口大小分辨率。默认值为 0，即全分辨率。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Pyramid Level Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _pyramid_level_resolution { get; set; } = 0;


        public InterpolatePolyToPatch SetEnv(object XYDomain = null, object XYResolution = null, object ZDomain = null, object ZResolution = null, int? autoCommit = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(XYDomain: XYDomain, XYResolution: XYResolution, ZDomain: ZDomain, ZResolution: ZResolution, autoCommit: autoCommit, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}